该内容已被发布者删除 该内容被自由微信恢复
文章于 3月30日 下午 9:00 被检测为删除。
查看原文
被用户删除
其他

R语言绘图 | 使用forestploter绘制森林图

小陈的R语言笔记 小陈的R语言笔記 2024-03-30

准备

# 安装 forestploter 包
install.packages("forestploter")  

#加载grid、forestploter包
library(grid)  
library(forestploter)  

# 读取示例数据文件
dt <- read.csv(system.file("extdata""example_data.csv", package = "forestploter"))

基本森林图

# 如果安慰剂列中有数字,则缩进亚组
dt$Subgroup <- ifelse(is.na(dt$Placebo), 
                      dt$Subgroup,  # 如果 Placebo 列是 NA,则不缩进,否则在亚组名前添加空格
                      paste0("   ", dt$Subgroup))

# 将 NA 转换为空白
dt$Treatment <- ifelse(is.na(dt$Treatment), "", dt$Treatment)  # 将 Treatment 列的 NA 转换为空字符串
dt$Placebo <- ifelse(is.na(dt$Placebo), "", dt$Placebo)  # 将 Placebo 列的 NA 转换为空字符串
dt$se <- (log(dt$hi) - log(dt$est))/1.96  # 计算标准误差

# 为森林图添加一个空白列用于显示 CI,使用空格调整列宽
dt$` ` <- paste(rep(" ", 20), collapse = " ")  # 在数据框中添加一个名为“ ”的列,用于在森林图中显示空白

# 创建用于显示置信区间的列
dt$`HR (95% CI)` <- ifelse(is.na(dt$se), "",  # 如果标准误差为 NA,则为空字符串
                           sprintf("%.2f (%.2f to %.2f)",  # 否则,格式化置信区间
                                   dt$est, dt$low, dt$hi))

# 定义主题
tm <- forest_theme(base_size = 10,  # 设置基本字体大小
                   refline_col = "red",  # 设置参考线颜色为红色
                   arrow_type = "closed",  # 设置箭头类型为闭合箭头
                   footnote_col = "blue")  # 设置脚注颜色为蓝色

p <- forest(dt[,c(1:3, 20:21)],  # 选择需要绘制的列
            est = dt$est,  # 效应值
            lower = dt$low,  # 下限
            upper = dt$hi,  # 上限
            sizes = dt$se,  # 点的大小
            ci_column = 4,  # 置信区间的列索引
            ref_line = 1,  # 参考线位置
            arrow_lab = c("Placebo Better""Treatment Better"),  # 箭头标签
            xlim = c(0, 4),  # x轴的范围
            ticks_at = c(0.5, 1, 2, 3),  # 设置刻度位置
            footnote = "This is the demo data. Please feel free to change\nanything you want.",  # 脚注内容
            theme = tm)  # 应用主题

plot(p)  # 绘制森林图

美化

# 编辑第三行的文本
g <- edit_plot(p, row = 3, gp = gpar(col = "red", fontface = "italic"))  # 使用 gpar 函数编辑第三行的文本,设置颜色为红色,字体为斜体

# 加粗分组文本
g <- edit_plot(g,
               row = c(2, 5, 8, 11, 15, 18),  # 编辑的行号
               gp = gpar(fontface = "bold"))  # 使用 gpar 函数设置字体为粗体

# 在顶部插入文本
g <- insert_text(g,
                 text = "Treatment group",  # 插入的文本内容
                 col = 2:3,  # 指定列范围
                 part = "header",  # 插入的部分为头部
                 gp = gpar(fontface = "bold"))  # 使用 gpar 函数设置字体为粗体

# 在头部底部添加下划线
g <- add_border(g, part = "header", row = 1, where = "top")  # 在头部第一行顶部添加边框
g <- add_border(g, part = "header", row = 2, where = "bottom")  # 在头部第二行底部添加边框
g <- add_border(g, part = "header", row = 1, col = 2:3, 
                gp = gpar(lwd = 2))  # 在头部第一行第二列到第三列添加粗边框

# 编辑第五行的背景
g <- edit_plot(g, row = 5, which = "background",  # 编辑第五行的背景
               gp = gpar(fill = "darkolivegreen1"))  # 使用 gpar 函数设置背景颜色为 darkolivegreen1

# 插入文本
g <- insert_text(g,
                 text = "This is a long text. Age and gender summarised above.\nBMI is next",  # 插入的文本内容
                 row = 10,  # 插入的行号
                 just = "left",  # 文本对齐方式为左对齐
                 gp = gpar(cex = 0.6, col = "green", fontface = "italic"))  # 使用 gpar 函数设置字体大小为0.6,颜色为绿色,字体为斜体
g <- add_border(g, row = 10, col = 1:3, where = "top")  # 在第十行第一列到第三列添加顶部边框

plot(g)  # 绘制森林图

多组森林图

# 为第二个置信区间列添加一个空白列
dt$`   ` <- paste(rep(" ", 20), collapse = " ")  # 在数据框中添加一个名为“   ”的列,用于在森林图中显示空白

# 设置主题
tm <- forest_theme(base_size = 10,  # 设置基本字体大小
                   refline_col = "red",  # 设置参考线颜色为红色
                   footnote_col = "blue",  # 设置脚注颜色为蓝色
                   legend_name = "GP",  # 设置图例名称
                   legend_value = c("Trt 1""Trt 2"))  # 设置图例值

p <- forest(dt[,c(1:2, 20, 3, 22)],  # 选择需要绘制的列
            est = list(dt$est_gp1,
                       dt$est_gp2,
                       dt$est_gp3,
                       dt$est_gp4),  # 效应值列表
            lower = list(dt$low_gp1,
                         dt$low_gp2,
                         dt$low_gp3,
                         dt$low_gp4),  # 下限列表
            upper = list(dt$hi_gp1,
                         dt$hi_gp2,
                         dt$hi_gp3,
                         dt$hi_gp4),  # 上限列表
            ci_column = c(3, 5),  # 置信区间的列索引
            ref_line = 1,  # 参考线位置
            arrow_lab = c("Placebo Better""Treatment Better"),  # 箭头标签
            nudge_y = 0.2,  # 在 y 轴方向上微调箭头位置
            x_trans = "log",  # 对 x 轴进行对数转换
            theme = tm)  # 应用主题

plot(p)  # 绘制森林图

参考资料:https://github.com/adayim/forestploter



继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存